package com.hsurosy.domain.activity.service;

import com.hsurosy.domain.activity.model.entity.*;

/**
 * @Author Hsu琛君珩
 * @Date 2024-11-04 17:06
 * @Description 抽奖活动订单接口
 * @Version: v1.0.0
 */
public interface IRaffleActivityAccountQuotaService {

    /**
     * 以sku创建抽奖活动订单，获得参与抽奖资格（可消耗的次数）
     *
     * @param activityShopCartEntity 活动sku实体，通过sku领取活动
     * @return 活动参与记录实体
     */
    ActivityOrderEntity createRaffleActivityOrder(ActivityShopCartEntity activityShopCartEntity);

    /**
     * 创建sku账户充值订单，给用户增加抽奖次数
     *
     * @param skuRechargeEntity 活动商品充值实体
     * @return 未支付的活动订单信息
     */
    UnpaidActivityOrderEntity createOrder(SkuRechargeEntity skuRechargeEntity);

    /**
     * 更新订单信息
     *
     * @param deliveryOrderEntity 包含订单更新信息的实体对象
     */
    void updateOrder(DeliveryOrderEntity deliveryOrderEntity);

    /**
     * 查询用户当天在指定活动中的参与次数
     *
     * @param activityId 活动ID，用于标识具体的抽奖活动
     * @param userId 用户ID，用于查询该用户在活动中的参与记录
     * @return 返回用户当日的参与次数
     */
    Integer queryRaffleActivityAccountDayPartakeCount(Long activityId, String userId);

    /**
     * 查询用户的活动账户信息
     *
     * @param activityId 活动ID，用于标识具体的抽奖活动
     * @param userId 用户ID，用于查询该用户的账户配额信息
     * @return 用户活动账户实体对象，包含账户配额、剩余额度等信息
     */
    ActivityAccountEntity queryActivityAccountEntity(Long activityId, String userId);

    /**
     * 查询用户在指定活动中的总参与次数
     *
     * @param activityId 活动ID，用于标识具体的抽奖活动
     * @param userId 用户ID，用于查询该用户的总参与记录
     * @return 用户在该活动中的总参与次数
     */
    Integer queryRaffleActivityAccountPartakeCount(Long activityId, String userId);

}
